home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / REALITY / distort / ripple_precalc.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  3KB  |  130 lines

  1. /*
  2.  * Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17. /*
  18.     ripple_precalc.c
  19.     Drew Olbrich, 1992
  20.  
  21.     This program precomputes the data used to generate the
  22.     ripple pattern.  A C source file containing the data is
  23.     produced.  This file is compiled and linked into the
  24.     final executable.
  25. */
  26.  
  27. #include <stdio.h>
  28. #include <math.h>
  29.  
  30. #include "defs.h"
  31. #include "ripple.h"
  32.  
  33. /*
  34.     Precompute ripple displacement vectors.
  35. */
  36.  
  37. void precalc_ripple_vector()
  38. {
  39.   int i, j;
  40.   float x, y;
  41.   double l;
  42.  
  43.   printf("RIPPLE_VECTOR ripple_vector[GRID_SIZE_X][GRID_SIZE_Y] =\n");
  44.   printf("{\n");
  45.  
  46.   for (i = 0; i < GRID_SIZE_X; i++)
  47.   {
  48.     for (j = 0; j < GRID_SIZE_Y; j++)
  49.     {
  50.       x = i/(GRID_SIZE_X - 1.0);
  51.       y = j/(GRID_SIZE_Y - 1.0);
  52.  
  53.       l = sqrt(x*x + y*y);
  54.       if (l == 0.0)
  55.       {
  56.     x = 0.0;
  57.     y = 0.0;
  58.       }
  59.       else
  60.       {
  61.     x /= l;
  62.     y /= l;
  63.       }
  64.  
  65.       printf("  %g, %g, %d", x, y, (int) (l*WIN_SIZE_X));
  66.  
  67.       if (i == GRID_SIZE_X - 1 && j == GRID_SIZE_Y - 1)
  68.     printf("\n");
  69.       else
  70.     printf(",\n");
  71.     }
  72.   }
  73.  
  74.   printf("};\n");
  75. }
  76.  
  77. /*
  78.     Precompute ripple amplitude decay.
  79. */
  80.  
  81. void precalc_ripple_amp()
  82. {
  83.   int i;
  84.   double t;
  85.   double a;
  86.  
  87.   printf("RIPPLE_AMP ripple_amp[RIPPLE_LENGTH] =\n");
  88.   printf("{\n");
  89.  
  90.   for (i = 0; i < RIPPLE_LENGTH; i++)
  91.   {
  92.     t = 1.0 - i/(RIPPLE_LENGTH - 1.0);
  93.     a = (-cos(t*2.0*3.1428571*RIPPLE_CYCLES)*0.5 + 0.5)
  94.       *RIPPLE_AMPLITUDE*t*t*t*t*t*t*t*t;
  95.     if (i == 0)
  96.       a = 0.0;
  97.  
  98.     printf("  %g", a);
  99.  
  100.     if (i == RIPPLE_LENGTH - 1)
  101.       printf("\n");
  102.     else
  103.       printf(",\n");
  104.   }
  105.  
  106.   printf("};\n");
  107. }
  108.  
  109. /*
  110.     Generate the source file.
  111. */
  112.  
  113. int main()
  114. {
  115.   printf("/* THIS FILE WAS MACHINE-GENERATED */\n");
  116.   printf("\n");
  117.  
  118.   printf("#include \"defs.h\"\n");
  119.   printf("#include \"ripple.h\"\n");
  120.   printf("\n");
  121.  
  122.   precalc_ripple_vector();
  123.  
  124.   printf("\n");
  125.  
  126.   precalc_ripple_amp();
  127.  
  128.   return 0;
  129. }
  130.